#include "../include/strings.h"
#include "../include/defs.h"
#include "../include/pruebaExc.h"
#include "../include/menu.h"
#include "../include/getnum.h"
#include "../include/kasm.h"
#include "../include/testF.h"


//devuelve 0 si ingrese el comando ingresado es correcto.

int
valComando(my_shell * buffer)
{
	const char vec[][20] = {{"yuda"},{"witchTerminal"},{"ntTimerTick"}, {"cho"},{"ntTimerTickEnd"}};	
	int i, dim;
	int comando=COMAND_ERROR;
	//char[] ret;
	
	if(buffer->comando_actual.siguiente != 0)
	{	
		if(buffer->comando_actual.siguiente < buffer->comando_actual.size)
			buffer->comando_actual.buf[buffer->comando_actual.siguiente] = '\0';
		dim=limpiarBlancos(buffer->comando_actual.buf, buffer->comando_actual.size);
		if(dim != 0)
		{

			switch(buffer->comando_actual.buf[0])
			{
					
				case 'A':case 'a': 
					if( strNcmp(buffer->comando_actual.buf + 1 , vec[0], 4) )
					{	
						if( (buffer->comando_actual.buf[5]) == '\0' )
							comando=AYUDA;
						else if( (buffer->comando_actual.buf[5]) == ' ' )
						{
							
						}
					}
					
					break;

				case 'S':case 's':
					
					if( strNcmp(buffer->comando_actual.buf + 1 , vec[1], 13) )
					{	
						if( (buffer->comando_actual.buf[14]) == '\0' ){
							isEnter();
							if(buffer->siguiente < buffer->size){
      								buffer->buf[buffer->siguiente++] = '\n';
     							}
						return 1;	
						}
							
					}
					
					break;

				case 'I':case 'i':
					if( strNcmp(buffer->comando_actual.buf + 1 , vec[2], 11) )
					{	
						if( (buffer->comando_actual.buf[12]) == '\0' )
							comando=INTTIMERTICK;
							
						
					}
					if( strNcmp(buffer->comando_actual.buf + 1 , vec[4], 14) )
					{	
						if( (buffer->comando_actual.buf[15]) == '\0' )
							comando=INTTIMERTICKEND;
							
						
					}
					
					break;

				case 'E':case 'e':
					if( strNcmp(buffer->comando_actual.buf + 1 , vec[3], 3) )
					{	
						//if( (buffer->comando_actual.buf[4]) == '\0' )
							comando=ECHO;
							
						
					}
					
					break;
				case 'p': 
					break;					
					
				default:isEnter(); break;
			}
		}
	if(buffer->siguiente < buffer->size){
      		buffer->buf[buffer->siguiente++] = '\n';
     	}
	isEnter();
	llamaComando(comando,buffer);
	}
	if(buffer->siguiente < buffer->size){
      		buffer->buf[buffer->siguiente++] = '\n';
     	}
	isEnter();
	
	return 0;
}



void
llamaComando(int com, my_shell * bufShell)
{
	static char comando_inex []= {'C','o','m','a','n','d','o',' ','i','n','e','x','i','s','t','e','n','t','e','\n'};	
	switch(com)
	{
		case AYUDA:		
			ayuda(bufShell); 

			break;
		case COMAND_ERROR:	
			print("Comando inexistente\n"); 
			int i;			
			for(i=0; i<20;i++){ 
				if(bufShell->siguiente < bufShell->size){
      					bufShell->buf[bufShell->siguiente++] = comando_inex[i];
     				}
			}
			break;
		case INTTIMERTICK:
			intTimerTick(bufShell);
			break;
		case INTTIMERTICKEND:
			intTimerTickEnd(bufShell);
			break;
		case ECHO:
			echo(bufShell);
			break;
		
		
}
}
int TIMERINT=0;

void intTimerTick(my_shell* bufShell){
	static char m[] = "Interrupciones del timer tick comenzadas";
	int i;

	for(i=0; m[i]!='\0';i++){ 
		if(bufShell->siguiente < bufShell->size){
      			bufShell->buf[bufShell->siguiente++] = m[i];
     		}
	}


	isEnter();

	print("Interrupciones del timer tick comenzadas");
	TIMERINT=1;
	



	isEnter();
	
}

void intTimerTickEnd(my_shell* bufShell){
	static char m[] = "Interrupciones del timer tick finalizadas";
	int i;

	for(i=0; m[i]!='\0';i++){ 
		if(bufShell->siguiente < bufShell->size){
      			bufShell->buf[bufShell->siguiente++] = m[i];
     		}
	}


	isEnter();

	print("Interrupciones del timer tick finalizadas");
	TIMERINT=0;
	



	isEnter();
	
}

void echo(my_shell* bufShell){
	static char pf[]="Parametro faltante";	
	int i;			
	for(i=5; bufShell->comando_actual.buf[i]!='\0';i++){ 
		if(bufShell->siguiente < bufShell->size){
      			bufShell->buf[bufShell->siguiente++] = bufShell->comando_actual.buf[i];
     		}
	}
	isEnter();
	if(bufShell->comando_actual.buf[4]=='\0' || bufShell->comando_actual.buf[4]=='\0'){
		print(pf);
		for(i=0; pf[i]!='\0';i++){ 
			if(bufShell->siguiente < bufShell->size){
	      			bufShell->buf[bufShell->siguiente++] = pf[i];
	     		}
		}
	}else{
      		print(bufShell->comando_actual.buf+5);

	}
	
	isEnter();

}

void
ayuda(my_shell* bufShell)
{
	static char ayud[]="AYUDA\nPara cambiar idioma del teclado presione: F1\nPara cambiar de terminal presione: Shift + Tab\nComandos validos de ayuda: \nintTimerTick:comienza interrumpciones del timer tick.\nintTimerTickEnd: finaliza interrumpciones del timer tick.\nswitchTerminal: cambia de terminal\necho: imprime en pantalla el parametro recibido";
	int i;			
	for(i=0; ayud[i]!='\0';i++){ 
		if(bufShell->siguiente < bufShell->size){
      			bufShell->buf[bufShell->siguiente++] = ayud[i];
     		}
	}

	isEnter();
	print("AYUDA\n");
	isEnter();
	print("Para cambiar idioma del teclado presione: F1\n");
	print("Para cambiar de terminal presione: Shift + Tab\n");	
	print("Comandos validos de ayuda: \n");
	print("intTimerTick: comienza interrumpciones del timer tick.\n");
	print("intTimerTickEnd: finaliza interrumpciones del timer tick.\n");	
	print("switchTerminal: cambia de terminal\n");
	print("echo: imprime en pantalla el parametro recibido");
	isEnter();
	return;
}



